//
// Created by twetec on 25-5-28.
//
#include <network_prober/logger/debug_logger.h>

#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/daily_file_sink.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>

namespace network_prober::logger
{
DebugLogger& DebugLogger::getInstance()
{
    static DebugLogger instance;
    return instance;
}

void DebugLogger::init()
{
    // 构建sink(控制台的彩色日志)
    auto sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();

    // 构建logger
    m_logger = std::make_shared<spdlog::logger>("logger", sink);

    // 日志等级
    m_logger->set_level(spdlog::level::debug);
    // 输出格式
    m_logger->set_pattern("%Y-%m-%d %H:%M:%S [%l][%t] - <%s>|<%#>|<%!> - %v");

    // 注册为全局默认logger
    spdlog::set_default_logger(m_logger);
}

DebugLogger::DebugLogger()
{
    // 移除所有sink
    spdlog::drop_all();
    // 设定日志输出等级，可以输出>=设定等级的日志
    // spdlog::set_level(spdlog::level::debug);
    // 设定日志的输出间隔，
    //    spdlog::set_pattern("%Y-%m-%d %H:%M:%S [%l] [%t] - <%s>|<%#>|<%!>,%v");
    // 每隔3秒钟，将内存中的日志信息输出到sink
    spdlog::flush_every(std::chrono::seconds(3));
}

DebugLogger::~DebugLogger()
{
    // 移除所有sink
    spdlog::drop_all();
    // 关闭日志系统
    spdlog::shutdown();
}

}